/*
 * Tencent is pleased to support the open source community by making polaris-go available.
 *
 * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
 *
 * Licensed under the BSD 3-Clause License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://opensource.org/licenses/BSD-3-Clause
 *
 * Unless required by applicable law or agreed to in writing, software distributed
 *  under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 */

package crypto

import (
	"errors"
	"fmt"

	"github.com/hashicorp/go-multierror"
)

// Config crypto filter config
type Config struct {
	Entries []ConfigEntry `yaml:"entries"`
}

// ConfigEntry config entry
type ConfigEntry struct {
	Name   string                 `yaml:"name"`
	Option map[string]interface{} `yaml:"option"`
}

// Verify verify config.configFilter
func (c *Config) Verify() error {
	if nil == c {
		return errors.New("ConfigFilterConfig is nil")
	}
	var errs error
	if len(c.Entries) == 0 {
		errs = multierror.Append(errs, fmt.Errorf("config.ConfigFilter.Crypto is empty"))
	}
	return errs
}

// SetDefault set default config.configFilter
func (c *Config) SetDefault() {
	if len(c.Entries) == 0 {
		c.Entries = append(c.Entries, ConfigEntry{
			Name: "AES",
		})
	}
}
